package model.board;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.ibatis.sqlmap.client.SqlMapClient;

public class BoardDao {
	private SqlMapClient sqlMapClient;
	public void setSqlMapClient(SqlMapClient sqlMapClient) {
		this.sqlMapClient = sqlMapClient;
	}
	
	/**
	 * 게시글 쓰기
	 * @param : BoardVO
	 * @return : content_no
	 */
	public int write(BoardVO bvo) throws SQLException{
		System.out.println("다오 - 글쓰기에서 bvo찍기"+bvo);
		return (Integer)sqlMapClient.insert("write",bvo);
	}	
	
	/**
	 * 글쓴 날짜 받아오기
	 * @param : content_no
	 * @return : 해당 게시물 글쓴 날짜
	 */
	public String selectByNoForDate(int no) throws SQLException{
		return (String)sqlMapClient.queryForObject("selectByNoForDate",no);
	}

	/**
	 * board_no로 해당 게시판 게시글 수 받아오기
	 * @param board_no
	 * @return 해당 게시판 전체 게시글 수
	 */
	public int totalContent(String boardNo) throws SQLException{
		System.out.println("토탈 여긴가?");
		return (Integer)sqlMapClient.queryForObject("totalContent", boardNo);
	}
	
	/**
	 * 모든 게시판 게시글 수 받아오기 (예외-> 방명록은 제외)
	 * @return 해당 게시판 전체 게시글 수
	 */
	public int totalContent() throws SQLException{
		return (Integer)sqlMapClient.queryForObject("totalContentGetAll");
	}
	
	/**
	 *  마지막 게시글 번호 받아오기
	 * @param board_no
	 * @return sub_content_no
	 */
	public int getMaxSubContentNo(int board_no) throws SQLException {
		int maxNo=0;
		if((int)sqlMapClient.queryForObject("totalContent",board_no)!=0){
			maxNo=(int)sqlMapClient.queryForObject("getMaxSubContentNo", board_no);
		}
		return  maxNo;
	}
	
	/**
	 * 게시글 리스트 받아오기
	 * @param map : pageNo-페이지번호 boardNo-게시판번호
	 * @return : List<BoardVO>
	 */
	public List<BoardVO> getBoardList(Map map) throws SQLException{
		return sqlMapClient.queryForList("getBoardList", map);
	}
	
	/**
	 * 게시글 볼 때 count 올리기
	 * @param content_no
	 */
	public void updateCount(String no) throws SQLException{
		sqlMapClient.update("updateCount", no);
	}
	
	/**
	 * 게시글 보기
	 * @param content_no
	 * @return BoardVO
	 */
	public BoardVO showContent(String no) throws SQLException{
		return (BoardVO)sqlMapClient.queryForObject("showContent",no);
	}
	
	/**
	 * 게시글 삭제
	 * @param content_no
	 */
	public void deleteBoard(String no) throws SQLException{
		sqlMapClient.delete("deleteBoard", no);
	}
	
	/**
	 * 게시글 수정
	 * @param BoardVO
	 */
	public void updateBoard(BoardVO bvo) throws SQLException{
		sqlMapClient.update("updateBoard", bvo);
	}
	
	/**
	 * 덧글 순서 정렬
	 * @param BoardVO
	 */
	public void answerSort(BoardVO bvo) throws SQLException {
		sqlMapClient.update("answerSort", bvo);
	}
	
	/**
	 * 덧글 쓰기
	 * @param BoardVO
	 * @return content_no
	 */
	public int answerBoard(BoardVO bvo) throws SQLException {
		return (Integer)sqlMapClient.insert("answerBoard",bvo);
	}

	public void uploadFileBoard(BoardVO bvo)throws SQLException{
		sqlMapClient.update("uploadFileBoard",bvo);
	}
	public void deleteFileBoard(String no) throws SQLException {
		sqlMapClient.update("deleteFileBoard",no);
	}

	/**
	 * 게시판 번호로 게시판 이름 받기
	 * @param 게시판 번호
	 * @return 게시판 이름
	 */
	public String getBoardName(String no) throws SQLException {
		return (String)sqlMapClient.queryForObject("getBoardName",no);
	}

	/**
	 * 미니리플 쓰기
	 * @param bvo
	 * @return
	 * @throws SQLException
	 */
	public int writeRefly(ReflyVO rvo) throws SQLException {
		return (Integer)sqlMapClient.insert("writeRefly",rvo);
	}

	/**
	 * 미니리플 리스트 가져오기
	 * @param no
	 * @return
	 * @throws SQLException
	 */
	public List<ReflyVO> reflyList(String no) throws SQLException {
		return sqlMapClient.queryForList("reflyList", no);
	}

	public void modifyRefly(Map map) throws SQLException {
		sqlMapClient.update("modifyRefly", map);
	}

	public void deleteRefly(String no) throws SQLException {
		sqlMapClient.delete("deleteRefly", no);
	}

	/**
	 * 검색한 게시물 수 받아오기
	 * @param kindMap (board_no : 게시판 번호, kind : 검색 종류)
	 * @return
	 * @throws SQLException
	 */
	public int totalSearchContent(HashMap map) throws SQLException {		
		int result=0;
		String kind=(String) map.get("kind");
		String no=(String) map.get("board_no");
		if(kind.equals("all")){
			result=(Integer)sqlMapClient.queryForObject("totalSearchContentByAll", map);
		}else if(kind.equals("title")){
			result=(Integer)sqlMapClient.queryForObject("totalSearchContentByTitle", map);
		}else if(kind.equals("writer")){
			result=(Integer)sqlMapClient.queryForObject("totalSearchContentByWriter", map);
		}
		return result;
	}

	/**
	 * 검색한 게시물 리스트 받아오기 
	 * @param map (board_no : 게시판 번호, kind : 검색 종류, str : 검색어, view : 페이지당 몇개씩 볼 건지)
	 * @return
	 * @throws SQLException
	 */
	public List<BoardVO> getSearchBoardList(HashMap map) throws SQLException {
		List<BoardVO> list= new ArrayList<BoardVO>();
		String kind=(String) map.get("kind");
		if(kind.equals("all")){
			list=sqlMapClient.queryForList("getSearchBoardListByAll", map);
		}else if(kind.equals("title")){
			list=sqlMapClient.queryForList("getSearchBoardListByTitle", map);
		}else if(kind.equals("writer")){
			list=sqlMapClient.queryForList("getSearchBoardListByWriter", map);
		}
		return list;
	}

	/**
	 * 모든 게시판의 게시글 리스트 받아오기
	 * @param map : pageNo-페이지번호 boardNo-게시판번호
	 * @return : List<BoardVO>
	 */
	public List<BoardVO> getBoardListAll(HashMap map) throws SQLException{
		System.out.println("dao getBoardListAll 들어가기직전<<");
		return sqlMapClient.queryForList("getBoardListAll", map);
	}

	/**
	 * 검색한 게시물 리스트 받아오기 
	 * @param map (board_no : 게시판 번호, kind : 검색 종류, str : 검색어, view : 페이지당 몇개씩 볼 건지)
	 * @return
	 * @throws SQLException
	 */
	public List<BoardVO> getAllSearchBoardList(HashMap map) throws SQLException {
		List<BoardVO> list= new ArrayList<BoardVO>();
		String kind=(String) map.get("kind");
		if(kind.equals("all")){
			list=sqlMapClient.queryForList("getAllSearchBoardListByAll", map);
		}else if(kind.equals("title")){
			list=sqlMapClient.queryForList("getAllSearchBoardListByTitle", map);
		}else if(kind.equals("writer")){
			list=sqlMapClient.queryForList("getAllSearchBoardListByWriter", map);
		}
		return list;
	}

	/**
	 * 전체 게시물 중 >> 검색한 게시물 수 받아오기
	 * @param kindMap (board_no : 게시판 번호, kind : 검색 종류)
	 * @return
	 * @throws SQLException
	 */
	public int allTotalSearchContent(HashMap map) throws SQLException {		
		int result=0;
		String kind=(String) map.get("kind");
		if(kind.equals("all")){
			result=(Integer)sqlMapClient.queryForObject("allTotalSearchContentByAll", map);
		}else if(kind.equals("title")){
			result=(Integer)sqlMapClient.queryForObject("allTotalSearchContentByTitle", map);
		}else if(kind.equals("writer")){
			result=(Integer)sqlMapClient.queryForObject("allTotalSearchContentByWriter", map);
		}
		return result;
	}

	public List<BoardVO> getGuestList(Map map) throws SQLException {
		return sqlMapClient.queryForList("getGuestList", map);
	}
}














